package someTestExcemple;

import java.util.ArrayList;
import java.util.List;

/**
 * 泛型上下界例子
 */

public class UpperBoundErrorExample {
    //extends 定义泛型上界 ,通配符类型必须为T，或者T的子类。通常用于读取操作
    public static <T extends Number> void printNumber(List<T> list) {
        for(T t : list) {
            System.out.println(t);
        }
    }
    //? super T 定义泛型下界,通配符必须为T，或者T的父类 通常用于写入操作，保证安全的向泛型集合中插入对象
    public static void addIntegers(List<? super Integer> list) {
        list.add(1);
        list.add(2);
    }

    public static void main(String[] args) {
        List<Double> doubleList = new ArrayList<>();
        doubleList.add(122.4);
        doubleList.add(16.89);
        //Double是Number的子类
        printNumber(doubleList);
        List<String> stringList = new ArrayList<>();
        stringList.add("yes");
        stringList.add("no");
        //编译报错String不是Number的子类
        //printNumber(stringList);


        List<Number> numberList = new ArrayList<>();
        //Number是Integer的父类
        addIntegers(numberList);
        System.out.println(numberList);
        List<Double> doubleList1 = new ArrayList<>();
        //编译错误，Double不是Integer的父类
        //addIntegers(doubleList1);
    }
}
